package com.medical.model.param;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import java.util.*;

/**
 * @author TISNIW
 * @version 1.0
 * @desc
 */
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SiliconCloud {
    @JsonProperty("model")
    private String model;//Qwen/Qwen3-8B
    @JsonProperty("messages")
    private List<Map<String, Object>> messages;
    @JsonProperty("stream")
    private Boolean stream;
    @JsonProperty("max_tokens")
    private Integer maxTokens;//1 <= x <= 16384
    @JsonProperty("enable_thinking")
    private Boolean enableThinking;
    @JsonProperty("thinking_budget")
    private Integer thinkingBudget;//128 <= x <= 32768
    @JsonProperty("min_p")
    private Double minP;//0 <= x <= 1
    @JsonProperty("stop")
    private List<String> stop;
    @JsonProperty("temperature")
    private Double temperature;//0 <= x <= 1
    @JsonProperty("top_p")
    private Double topP;//0 <= x <= 1
    @JsonProperty("top_k")
    private Integer topK;
    @JsonProperty("frequency_penalty")
    private Double frequencyPenalty;
    @JsonProperty("n")
    private Integer n;
    @JsonProperty("response_format")
    private Object responseFormat;
    @JsonProperty("tools")
    private List<Tool> tools;
    class Tool {
        @JsonProperty("type")
        private String type;//defalt is function
        @JsonProperty("function")
        private Function function;
        class Function {
            @JsonProperty("name")
            private String name;//要调用的函数的名称。必须是小写字母、大写字母、数字、下划线或连字符，最大长度为 64。
            @JsonProperty("description")
            private String description;//函数的作用描述，模型用于选择何时以及如何调用该函数。
            @JsonProperty("parameters")
            private Map<String, Object> parameters;//函数接受的参数，描述为 JSON Schema 对象。
            @JsonProperty("strict")
            private Boolean strict;//在生成函数调用时是否启用严格模式。如果设置为 true，模型将遵循 parameters 字段中定义的确切模式。当 strict 为 true 时，仅支持 JSON Schema 的子集。在函数调用指南中了解更多关于结构化输出的信息。
        }
    }

}
